<?php
namespace app\common\library\command;

use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
use think\Db;
use think\Hook;
use think\Validate;
use Workerman\Worker;
use Workerman\Lib\Timer;

// 自动加载类
require_once ROOT_PATH . 'application' . DS . 'common' . DS . 'library' . DS . 'GatewayWorker' . DS . 'vendor' . DS . 'autoload.php';


class Order extends Command
{
    protected function configure()
    {
        $this->setName('order')
			->addArgument('action', Argument::OPTIONAL, "start|stop|restart|reload|status|connections", 'start')
			->addOption('daemon', 'd', Option::VALUE_NONE, 'Run the workerman server in daemon mode.')
			->setDescription('Order planning task');
    }

    protected function execute(Input $input, Output $output)
    {
    	$action = $input->getArgument('action');
    	if (DIRECTORY_SEPARATOR !== '\\') {
    	    if (!in_array($action, ['start', 'stop', 'reload', 'restart', 'status', 'connections'])) {
    	        $output->writeln("<error>Invalid argument action:{$action}, Expected start|stop|restart|reload|status|connections .</error>");
    	        return false;
    	    }
    	    global $argv;
    	    array_shift($argv);
    	    array_shift($argv);
    	    array_unshift($argv, 'think', $action);
    	} elseif ('start' != $action) {
    	    $output->writeln("<error>Not Support action:{$action} on Windows.</error>");
    	    return false;
    	}
		
		if ('start' == $action) {
		    $output->writeln('Starting GatewayWorker server...');
		}
		
		// 启动计划任务
		$this->plan();
    	Worker::runAll();
    }
    
	
	// 初始化 计划任务 进程
	public function plan()
	{
		// 全局静态属性
		if($this->input->hasOption('daemon')){
			// 以daemon(守护进程)方式运行
			Worker::$daemonize = true;
		}
		Worker::$pidFile = '/var/run/wanlorder.pid';
		$worker = new Worker();
		$worker->count = 1; 
		$worker->onWorkerStart = function($worker)
		{
			echo "\r\n";
			echo "计划任务 启动成功";
			echo "\r\n";
			// 自动退款
			Timer::add(30, array($this, 'refund'));
            // 自动评价
            Timer::add(40, array($this, 'comment'));
			// 优惠券过期处理
			Timer::add(50, array($this, 'coupon'));

		};
	}
	
	/**
	 * 自动退款（方法内使用）
	 */
	public function refund()
	{
		echo date("Y-m-d H:i:s").' [检查可退款]--开始运行';
		echo "\r\n";
        //TODO 退款出路逻辑

        echo date("Y-m-d H:i:s").' [退款处理完毕]--';
        echo "\r\n";
	}


	/**
	 * 自动评价（方法内使用）
	 */
	public function comment()
	{
		echo date("Y-m-d H:i:s").' [自动评价]--开始运行';
		echo "\r\n";
        //TODO 评价逻辑

        echo date("Y-m-d H:i:s").' [自动评价完毕]--';
        echo "\r\n";
	}
	
	/**
	 * 优惠券过期处理（方法内使用）
	 */
	public function coupon()
	{
		echo date("Y-m-d H:i:s").' [优惠券过期处理]--开始运行';
		echo "\r\n";

        echo date("Y-m-d H:i:s").' [优惠券过期处理]--结束';
        echo "\r\n";

	}

}